package com.zl.tby.service;

import com.zl.tby.core.base.bean.TbyPageResult;
import com.zl.tby.core.common.R;
import com.zl.tby.dto.TbyUavInfoQuery;
import com.zl.tby.model.TbyUavInfo;
import com.zl.tby.vo.TbyUavInfoForm;

import java.math.BigDecimal;
import java.util.List;

/**
 * 无人机信息 service
 * @author changpeng
 * @version 1.0
 * @since 2024/8/6 19:56
 */
public interface ITbyUavInfoService {

    /**
     * 添加
     * @param entity: 表单信息
     * @return 保存结果
     */
    R<TbyUavInfo> add(TbyUavInfoForm entity);

    /**
     * 修改
     * @param entity: 表单信息
     * @return 修改结果
     */
    R<TbyUavInfo> update(TbyUavInfoForm entity);

    /**
     * 修改飞行里程等数据
     * @param entity
     * @return 结果
     */
    R<TbyUavInfo> updateData(TbyUavInfoForm entity);

    /**
     * 根据id删除
     * @param id: 主键id
     * @return 删除结果
     */
    int delete(Long id);

    /**
     * 根据id获取对象
     * @param id: 主键id
     * @return 实体对象
     */
    TbyUavInfo get(Long id);

    /**
     * 分页查询
     * @param query: 查询参数
     * @return 结果
     */
    TbyPageResult<TbyUavInfo> page(TbyUavInfoQuery query);

    /**
     * 列表查询
     * @param query: 查询参数
     * @return 结果
     */
    List<TbyUavInfo> list(TbyUavInfoQuery query);

    /**
     * 验证无人机编码是否存在
     * @param id: 主键id
     * @param code：设备编码
     * @return 结果
     */
    R<Boolean> checkCode(Long id, String code);

    /**
     * 验证无人机设备id是否存在
     * @param id: 主键id
     * @param deviceId：设备编码
     * @return 结果
     */
    R<Boolean> checkDeviceId(Long id, String deviceId);

    /**
     * 更新最后的坐标
     * @param code：无人机编码
     * @param longitude：坐标
     * @param latitude：坐标
     */
    void updateLonlat(String code, String longitude, String latitude);

    /**
     * 根据id更新为离线
     * @param id：主键id
     */
    void updateOffLine(Long id);

    /**
     * 更新为在线
     * @param uavCode: 设备id
     */
    void updateOnLine(String uavCode);

    /**
     * 根据设备id获取设备信息
     * @author AnWeiNan
     * @date 2024/11/5 下午6:40
     */
    List<TbyUavInfo> selectByDeviceId(String deviceId);

    /**
     * 根据设备id修改无人机信息
     * @author AnWeiNan
     * @date 2024/11/5 下午6:40
     */
    void updateByDeviceId(Long id, BigDecimal flightDistance, BigDecimal flightTime, Long flightCount);
}
